Larastan + reviewdog + CircleCI
できること
https://gyazo.com/0d814441414a2bd297143896c2514750
対象
Larastan:0.3.15(初稿) -> 0.5系(2019-12-28 見直し時)
PHPStan:0.11.1(初稿)
Larastanをブラックボックスとして利用したために問題の切り分けに手こずった
Larastan 0.5系からはこの方法ではできない
reviewdog: 0.9.14
自分が試みた限りではReviewdogでGitHub Checks(-reporter=github-pr-check)を利用することはできなかったので、PRのレビューコメントを付ける方法(-reporter=github-pr-review)で行った
手順
1. Larastanをインストールする
2. reviewdogをCircleCIに導入する
GitHubのトークンを生成
github-pr-reviewで利用するのはREVIEWDOG_GITHUB_API_TOKENなのでGitHubの個人ページから生成する /icons/重要.icon CircleCIの環境変数に生成したGitHubのトークンを設定する
トークンをリポジトリにPushするのはセキュリティリスクなのでしない
CircleIC側に設定する
CircleCIの設定(config.yml)を書く
CircleCIのconfig.ymlの設定
プロジェクトごとに違うはずなので要点だけ書く
code:config.yml
jobs:
build:
docker:
- image: circleci/php:7.2-apache-node-browsers # 自分のアプリが動く環境
environment:
REVIEWDOG_VERSION: 0.9.14
steps:
- run: cp .env.ci .env.testing # (1)
- run: php artisan key:generate --env=testing
- run: php artisan migrate --env=testing
- run:
name: Install reviewdog # (2)
- run:
shell: /bin/sh # (4)
name: Run reviewdog # (3)
# command: php artisan code:analyse --paths="packages" --error-format raw --no-progress --level=7 --no-tty 2>&1 | ./reviewdog -f=phpstan -reporter=github-pr-review // Larastan 0.4系以前
command: ./vendor/bin/phpstan analyse --error-format raw --no-progress 2>&1 | ./bin/reviewdog -f=phpstan -reporter=github-pr-review
0.5系のときには以下を追加する
code:phpstan.neon
includes:
- ./vendor/nunomaduro/larastan/extension.neon
parameters: parameters:
paths:
- packages // rootディレクトリ直下のsrcディレクトリ
level: 7
解説
(2) Install reviewdog
(3) Run reviewdog
前提
ローカル開発環境のテスト用の環境変数を.env.testにまとめている
CI用の環境変数を .env.ciにまとめている
(1) Laravelの自分のプロジェクト固有の話。.env.ciの中身を.env.testingに変更すると、以降Artisanで--env=testingをつけるとci用の環境変数が利用される
これをしない場合意図しない環境変数が利用されてしまうので必ずつける
--envをつけるのは面倒なので.env.ciは.envにコピーすれば良いと思う。今回は、ローカル環境でテスト用のテーブルをしっかりわけたので、phpunit.xmlが.env.testingを読みに行く設定になっているためにこうしている
php artisan code:analyse --env=testing --paths="packages" --error-format raw --no-progress --level=7 --no-tty 2>&1
Larastan 0.4系以前のときのコマンド
引数の説明
env:前述の通り
これいらないのでは?(とったときの挙動は検証していません)
no-progress:reviewdogに食わせるときに進捗表示は邪魔。rawだけ出てほしい
./bin/reviewdog -f=phpstan -reporter=github-pr-review
reviewdogにphpstanの結果を渡している。reviewdogはPHPStanの内容(これはプロジェクト全体の警告を出す)と、PRの(多分)HEADと分岐元rootのブランチ内での変更点を比較し、PRででた変更点を抽出する そしてその内容をreviewdogのGitHub連携によってGitHub上のPRコメントとして表示する
もしPHPStanでやるなら
code:config.yml
command: |
./vendor/bin/phpstan analyze --level=5 -c phpstan.neon --error-format raw --no-progress packages | ./reviewdog -f=phpstan -reporter=github-pr-review
課題
アクセスキーの人のコメントが付けられるので、自分のPRに自分がコメントしてしまい、なんとも言えない気分になる
参考